#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

const int size = 700;
int N = 603;
int I;

double dp[size][size][4];
__int64 ans[size];


int rec(int start, int n, int len)
{
	if (n==0)
	{
		ans[I]++;
		return 1;
		/*
		if (len%4==I%4)
		{
			ans[I]++;
			return 1;
		}
		else
			return 0;*/
	}
	if (start>n)
		return 0;
	int i, res = 0;
	if (rec(start,n-start, len+1))
	{
		//ans[I]++;
		res = 1;
	}
	if (rec(start+1, n, len))
	{
		res = 1;
	}
	return res;
}

double rec1(int n, int k, int shift)
{
	if (n<k)
	{
		if (n == 0)// && shift == 0)
			return 1;
		return 0;
	}
	else
	{
		if (dp[n][k][shift]!=-1)
			return dp[n][k][shift];

		double res1 = rec1(n-k, k, (shift+1-k+4*n)%4);
		double res2 = rec1(n, k+1, shift);
		//if (k<n && res1) res1++;
		dp[n][k][shift] = res1 + res2;
		return dp[n][k][shift];
	}
}

double getAns(int n)
{
	return dp[n][1][0];
}

int numbers[size], n1;

int rec2(int op, int n, int k, int shift)
{
	if (n==0)
	{
		//cout<<setw(3)<<k;
		return 0;
	}
	
	//set k
	int newShift = (shift+1-k+4*n)%4;
	__int64 res1 = rec1(n-k, k+2, newShift);

	if (res1>0 && k<n)
		res1++;

	if (op<=res1 && res1>0)
	{
		cout<<setw(3)<<k;
		rec2(op - 1, n-k, k+2, newShift);
	}
	else
	{
		op = op - res1;
		rec2(op, n, k+2, shift);
	}

	return 0;
}

int mm, II;

int rec3(int start, int n, int len)
{
	if (n==0)
	{
		if (len%4==I%4)
		{
			if (II <= 0)
			{
				for (int i = 0;i<len;i++)
					cout<<setw(3)<<numbers[i];
				return 1;
			}
		}
		return 0;
	}
	if (start>n)
		return 0;
	int i, res = 0;
	numbers[len] = start;
	if (rec(start+2,n-start, len+1))
	{
		II--;
		if (rec3(start+2,n-start,len+1))
			res = 1;
	}
	if (res)
		return 1;
	if (rec3(start+2, n, len))
	{
		res = 1;
	}
	return res;
}

int rec4(int start, int n, int len)
{
	if (n==0)
	{
		if (len%4==I%4)
		{
			if (II <= 0)
			{
				for (int i = 0;i<len;i++)
					cout<<setw(3)<<numbers[i];
				cout<<endl;
				return 1;
			}
		}
		return 0;
	}
	if (start>n)
		return 0;
	int i, res = 0;
	numbers[len] = start;
	if (rec4(start+2,n-start, len+1))
	{
		res = 1;
	}
	if (rec4(start+2, n, len))
	{
		res = 1;
	}
	return res;
}

const int T = 50;
int main()
{
	int i,j,k;
	freopen("output.txt", "w", stdout);
	/*
	for (I=1;I<=N;I++)
	{
		printf("%8d",I);
	}*/
	for (i=0;i<size;i++)
		for (j=0;j<size;j++)
			fill(dp[i][j], dp[i][j]+4, -1);
	/*cout<<endl;
	for (I=1;I<=N;I++)
	{
		rec(1,I, 0);
		printf("%8I64d",ans[I]);
	}
	cout<<endl;*/
	for (I=1;I<=N;I++)
	{
		rec1(I, 1, 0);
		printf("%lf",log(getAns(I)));
		cout<<endl;
	}
	cout<<endl;	

	/*
	for (i=1;i<=rec1(T,1,0);i++)
	{
		cout<<setw(3)<<i<<":";
		rec2(i,T,1,0);
		cout<<" *** ";
		I = T;
		mm = 0; II = i;
		rec3(1, T, 0);
		cout<<endl;
	}

	rec4(1, T, 0);

	for (i=100;i<=600;i+=100)
	{
		cout<<i<<":";
		printf("%I64d\n", rec1(i, 1, 0));
	}*/

	return 0;
}